package com.liveinstars.post.business.service.impl;

import com.liveinstars.post.business.model.dto.OptionDTO;
import com.liveinstars.post.business.model.dto.OptionSimpleDTO;
import com.liveinstars.post.business.model.entity.Option;
import com.liveinstars.post.business.model.enums.PostPermalinkType;
import com.liveinstars.post.business.model.enums.ValueEnum;
import com.liveinstars.post.business.model.params.OptionParam;
import com.liveinstars.post.business.model.params.OptionQuery;
import com.liveinstars.post.business.model.properties.PropertyEnum;
import com.liveinstars.post.business.repository.base.BaseRepository;
import com.liveinstars.post.business.service.OptionService;
import com.liveinstars.post.business.service.base.AbstractCrudService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Optional;

/**
 * OptionService implementation class
 *
 * @author ryanwang
 * @author johnniang
 * @date 2019-03-14
 */
@Slf4j
@Service
public class OptionServiceImpl extends AbstractCrudService<Option, Integer> implements OptionService {


    protected OptionServiceImpl(BaseRepository<Option, Integer> repository) {
        super(repository);
    }


    @Override
    public void save(Map<String, Object> options) {

    }

    @Override
    public void save(List<OptionParam> optionParams) {

    }

    @Override
    public void save(OptionParam optionParam) {

    }

    @Override
    public void update(Integer optionId, OptionParam optionParam) {

    }

    @Override
    public void saveProperty(PropertyEnum property, String value) {

    }

    @Override
    public void saveProperties(Map<? extends PropertyEnum, String> properties) {

    }

    @Override
    public Map<String, Object> listOptions() {
        return null;
    }

    @Override
    public Map<String, Object> listOptions(List<String> keys) {
        return null;
    }

    @Override
    public List<OptionDTO> listDtos() {
        return null;
    }

    @Override
    public Page<OptionSimpleDTO> pageDtosBy(Pageable pageable, OptionQuery optionQuery) {
        return null;
    }

    @Override
    public Option removePermanently(Integer id) {
        return null;
    }

    @Override
    public Object getByKeyOfNullable(String key) {
        return null;
    }

    @Override
    public Object getByKeyOfNonNull(String key) {
        return null;
    }

    @Override
    public Optional<Object> getByKey(String key) {
        return Optional.empty();
    }

    @Override
    public Object getByPropertyOfNullable(PropertyEnum property) {
        return null;
    }

    @Override
    public Object getByPropertyOfNonNull(PropertyEnum property) {
        return null;
    }

    @Override
    public Optional<Object> getByProperty(PropertyEnum property) {
        return Optional.empty();
    }

    @Override
    public <T> T getByPropertyOrDefault(PropertyEnum property, Class<T> propertyType, T defaultValue) {
        return null;
    }

    @Override
    public <T> T getByPropertyOrDefault(PropertyEnum property, Class<T> propertyType) {
        return null;
    }

    @Override
    public <T> Optional<T> getByProperty(PropertyEnum property, Class<T> propertyType) {
        return Optional.empty();
    }

    @Override
    public <T> T getByKeyOrDefault(String key, Class<T> valueType, T defaultValue) {
        return null;
    }

    @Override
    public <T> Optional<T> getByKey(String key, Class<T> valueType) {
        return Optional.empty();
    }

    @Override
    public <T extends Enum<T>> Optional<T> getEnumByProperty(PropertyEnum property, Class<T> valueType) {
        return Optional.empty();
    }

    @Override
    public <T extends Enum<T>> T getEnumByPropertyOrDefault(PropertyEnum property, Class<T> valueType, T defaultValue) {
        return null;
    }

    @Override
    public <V, E extends ValueEnum<V>> Optional<E> getValueEnumByProperty(PropertyEnum property, Class<V> valueType, Class<E> enumType) {
        return Optional.empty();
    }

    @Override
    public <V, E extends ValueEnum<V>> E getValueEnumByPropertyOrDefault(PropertyEnum property, Class<V> valueType, Class<E> enumType, E defaultValue) {
        return null;
    }

    @Override
    public int getPostPageSize() {
        return DEFAULT_POST_PAGE_SIZE;
    }

    @Override
    public int getArchivesPageSize() {
        return DEFAULT_ARCHIVES_PAGE_SIZE;
    }

    @Override
    public int getCommentPageSize() {
        return DEFAULT_COMMENT_PAGE_SIZE;
    }

    @Override
    public int getRssPageSize() {
        return DEFAULT_RSS_PAGE_SIZE;
    }

    @Override
    public Locale getLocale() {
        return null;
    }

    @Override
    public String getBlogBaseUrl() {
        return null;
    }

    @Override
    public String getBlogTitle() {
        return null;
    }

    @Override
    public String getSeoKeywords() {
        return null;
    }

    @Override
    public String getSeoDescription() {
        return null;
    }

    @Override
    public long getBirthday() {
        return 0;
    }

    @Override
    public PostPermalinkType getPostPermalinkType() {
        return null;
    }

    @Override
    public String getSheetPrefix() {
        return null;
    }

    @Override
    public String getLinksPrefix() {
        return null;
    }

    @Override
    public String getPhotosPrefix() {
        return null;
    }

    @Override
    public String getJournalsPrefix() {
        return null;
    }

    @Override
    public String getArchivesPrefix() {
        return null;
    }

    @Override
    public String getCategoriesPrefix() {
        return null;
    }

    @Override
    public String getTagsPrefix() {
        return null;
    }

    @Override
    public String getPathSuffix() {
        return null;
    }

    @Override
    public Boolean isEnabledAbsolutePath() {
        return null;
    }

    @Override
    public List<OptionDTO> replaceUrl(String oldUrl, String newUrl) {
        return null;
    }

    @Override
    public OptionSimpleDTO convertToDto(Option option) {
        return null;
    }
}

